在软件开发的世界中,有一个众所周知的词汇——设计模式。设计模式是一种解决特定问题的优雅方案,代码让人看起来就有种自然的感觉。现在,我们就来轻松、幽默地了解一下这些神秘的设计模式吧!

创建型(Creational):生孩子还是领养?这里有五种方法!

1、单例模式(Singleton):只要一个宝贝!

想象一下,你的家里只能有一台电视机。这台电视机就像单例模式中的唯一实例。Java代码示例:

public class Television {private static Television instance;private Television() {}public static Television getInstance() {if (instance == null) {instance = new Television();}return instance;}
}

2、工厂方法模式(Factory Method):专业的孩子制造工厂!

每个孩子都是独一无二的,工厂方法模式就像一个专业的孩子制造工厂,可以根据需求生产出不同类型的孩子。Java代码示例:

public interface Child {void play();
}public class NaughtyChild implements Child {public void play() {System.out.println("I'm a naughty child!");}
}public class QuietChild implements Child {public void play() {System.out.println("I'm a quiet child.");}
}public abstract class ChildFactory {public abstract Child createChild();
}

3、抽象工厂模式(Abstract Factory):万能孩子制造厂!

抽象工厂模式就像一个万能孩子制造厂,不仅可以生产孩子,还能生产他们的玩具、衣服等。Java代码示例:

public interface Toy {void playWith();
}public class CarToy implements Toy {public void playWith() {System.out.println("Vroom, vroom!");}
}public class DollToy implements Toy {public void playWith() {System.out.println("Let's have a tea party!");}
}public abstract class AbstractChildFactory {public abstract Child createChild();public abstract Toy createToy();
}

4、建造者模式(Builder):DIY你的孩子!

建造者模式就像用积木搭建玩具,你可以自由搭配各种属性,组成不同的孩子。Java代码示例:

public class ChildBuilder {private String name;private int age;private String hobby;public ChildBuilder setName(String name) {this.name = name;return this;}public ChildBuilder setAge(int age) {this.age = age;return this;}public ChildBuilder setHobby(String hobby) {this.hobby = hobby;return this;}public Child build() {return new Child(name, age, hobby);}
}

5、原型模式(Prototype):克隆孩子,简单快捷!

想要快速复制一个孩子?原型模式就像克隆技术,让你轻松复制孩子。Java代码示例:

public class Child implements Cloneable {private String name;public Child(String name) {this.name = name;}public String getName() {return name;}@Overrideprotected Object clone() throws CloneNotSupportedException {return super.clone();}
}

结构型(Structural):孩子们的组织秘籍!

1、适配器模式(Adapter):兼容新老玩具!

适配器模式就像一个万能插头,让新旧玩具可以共用。Java代码示例:

public interface OldToy {void oldPlay();
}public interface NewToy {void newPlay();
}public class ToyAdapter implements NewToy {private OldToy oldToy;public ToyAdapter(OldToy oldToy) {this.oldToy = oldToy;}public void newPlay() {oldToy.oldPlay();}
}

2、桥接模式(Bridge):孩子与玩具的多样组合!

桥接模式就像拼图游戏,孩子和玩具可以任意组合。Java代码示例:

public interface Child {void play(Toy toy);
}public interface Toy {void playWith();
}public class Boy implements Child {public void play(Toy toy) {System.out.println("I'm a boy, and I'm playing with:");toy.playWith();}
}public class Girl implements Child {public void play(Toy toy) {System.out.println("I'm a girl, and I'm playing with:");toy.playWith();}
}

3、组合模式(Composite):组织孩子们的团队!

组合模式就像树形结构,可以轻松地组织孩子们的团队。Java代码示例:

public abstract class ChildComponent {public void add(ChildComponent component) {throw new UnsupportedOperationException();}public void remove(ChildComponent component) {throw new UnsupportedOperationException();}public ChildComponent getChild(int index) {throw new UnsupportedOperationException();}public void play() {throw new UnsupportedOperationException();}
}public class ChildGroup extends ChildComponent {private List<ChildComponent> components = new ArrayList<>();@Overridepublic void add(ChildComponent component) {components.add(component);}@Overridepublic void remove(ChildComponent component) {components.remove(component);}@Overridepublic ChildComponent getChild(int index) {return components.get(index);}@Overridepublic void play() {for (ChildComponent component : components) {component.play();}}
}

行为型(Behavioral):孩子们的行为规范!

1、观察者模式(Observer):妈妈总是知道!

观察者模式就像是妈妈总是知道孩子们在做什么。当孩子们的行为发生变化时,妈妈会立即得知。Java代码示例:

public interface Observer {void update(String message);
}public interface Subject {void registerObserver(Observer observer);void removeObserver(Observer observer);void notifyObservers();
}public class Child implements Subject {private List<Observer> observers;private String activity;public Child() {observers = new ArrayList<>();}public void setActivity(String activity) {this.activity = activity;notifyObservers();}@Overridepublic void registerObserver(Observer observer) {observers.add(observer);}@Overridepublic void removeObserver(Observer observer) {observers.remove(observer);}@Overridepublic void notifyObservers() {for (Observer observer : observers) {observer.update(activity);}}
}public class Mom implements Observer {@Overridepublic void update(String message) {System.out.println("Mom knows that the child is: " + message);}
}

2、策略模式(Strategy):适应不同的环境!

策略模式就像孩子们会根据不同的环境选择不同的玩法。Java代码示例:

public interface PlayStrategy {void play();
}public class IndoorPlayStrategy implements PlayStrategy {public void play() {System.out.println("Playing indoors!");}
}public class OutdoorPlayStrategy implements PlayStrategy {public void play() {System.out.println("Playing outdoors!");}
}public class Child {private PlayStrategy playStrategy;public void setPlayStrategy(PlayStrategy playStrategy) {this.playStrategy = playStrategy;}public void play() {playStrategy.play();}
}

3、责任链模式(Chain of Responsibility):家庭责任制!

责任链模式就像家庭责任制,孩子们可以按照家庭规矩来处理问题。Java代码示例:

public abstract class Handler {protected Handler nextHandler;public void setNextHandler(Handler nextHandler) {this.nextHandler = nextHandler;}public abstract void handleRequest(String request);
}public class Father extends Handler {@Overridepublic void handleRequest(String request) {if ("homework".equals(request)) {System.out.println("Father: I'll help with the homework.");} else if (nextHandler != null) {nextHandler.handleRequest(request);}}
}public class Mother extends Handler {@Overridepublic void handleRequest(String request) {if ("housework".equals(request)) {System.out.println("Mother: I'll help with the housework.");} else if (nextHandler != null) {nextHandler.handleRequest(request);}}
}

以上就是创建型、结构型、行为型设计模式的概览,希望通过这些生动、幽默的例子能让你对设计模式有更深入的了解。设计模式的运用能让你的代码更加优雅、易读,让软件开发变得更加轻松愉快!

四:轻松学设计模式:创建型、结构型、行为型概览相关推荐

  1. 设计模式(17):结构型-组合模式(Composite)(2)

    设计模式(Design pattern) 是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式 ...

  2. iOS设计模式四部曲(二) 结构型模式 内附Demo

    本篇是四部曲的第二篇,第一篇请点这里iOS设计模式四部曲(一):创建型模式 内附Demo,关于设计模式强烈推荐图书<Head First设计模式>以及<研磨设计模式>.由于个人 ...

  3. 设计模式总结之结构型模式

    设计模式总结之结构型模式 结构型模式描述如何组织类和对象以组成更大的结构.结构型类模式采用继承机制来组合接口和实现,结构型对象模式则采用组合聚合来组合对象以实现新功能,可以在运行时刻改变对象组合关系, ...

  4. 设计模式7大结构型模式

    2019独角兽企业重金招聘Python工程师标准>>> 结构型模式:结构型模式是描述如何将类对象结合在一起,形成一个更大的结构,结构模式描述两种不同的东西:类与类的实例.故可以分为类 ...

  5. Java设计模式之七大结构型模式(附实例和详解)

    博主在大三的时候有上过设计模式这一门课,但是当时很多都基本没有听懂,重点是也没有细听,因为觉得没什么卵用,硬是要搞那么复杂干嘛.因此设计模式建议工作半年以上的猿友阅读起来才会理解的比较深刻.当然,你没 ...

  6. 【设计模式】【结构型模式】装饰器模式

    概念 定义 装饰模式指动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活. 这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装饰类,用来包 ...

  7. 设计模式(13):结构型-装饰模式(Decorator)

    设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于 ...

  8. 图解Java设计模式学习笔记——结构型模式(适配器模式、桥接模式、装饰者模式、组合模式、外观模式、享元模式、代理模式)

    一.适配器模式(类适配器.对象适配器.接口适配器) 1.现实生活中的例子 泰国插座用的是两孔的(欧标),可以买个多功能转换插头(适配器),这样就可以使用了国内的电器了. 2.基本介绍 适配器模式(Ad ...

  9. 设计模式(16):结构型-桥接模式(Bridge)

    设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于 ...

最新文章

  1. OpenStack/Gnocchi简介——时间序列数据聚合操作提前计算并存储起来,先算后取的理念...
  2. Python 格式化输出和while循环的两个小练习
  3. OpenCASCADE:拓扑 API之特征
  4. excel合并同类项数据求和
  5. 2020江苏计算机二级考试官网,2020年秋季江苏省计算机等级考试报名通知
  6. 音视频开发(10)---nginx-rtmp视频流服务器搭建
  7. java中interrupt_Java中interrupt的使用
  8. 今天遇到的一个诡异的core和解决 std::sort
  9. uniapp 安装uView-ui教程
  10. QThread的用法
  11. matlab混沌指数的计算,Matlab编程之混沌系统李雅普诺夫指数分析
  12. python爬取电子病历_电子病历患者查询
  13. 亚马逊AWS云服务器 ubuntu系统登陆教程
  14. 29-SpringBoot 安全与SpringSecurity
  15. 全球及中国用于航空业的挂锁密封件行业研究及十四五规划分析报告
  16. wifi密码公式计算机,用定积分知识破译wifi密码,数学知识什么时候能派上用场?...
  17. 高速文件服务器搭建教程,文件服务器配置教程.doc
  18. Ae效果控件快速参考:模糊和锐化
  19. 使用Git来管理svn代码
  20. 计算搭积木是否能拼接成一个整体

热门文章

  1. 与合伙人谈事的注意事项
  2. 虚幻4引擎相比Unity3D强在什么地方?为什么吃鸡游戏都用该款引擎?
  3. 常用的SEO工具一览
  4. oracle 位图索引 死锁,Oracle位图索引引发的阻塞与死锁
  5. Char.IsDigit()或Char.IsNumber判断字符是否为数字,你真的对吗?
  6. c语言自动刷票代码,简单刷票系统 c语言实现(转)
  7. ffmpeg解析MP4封装的avc1编码问题
  8. 如何将WPS里文件的内容转换为图片格式
  9. Okhttp3 链接池复用机制源码探索
  10. 干掉布隆过滤器:布谷鸟过滤器有哪些神奇的魔法