创建型设计模式
创建型设计模式
一、六大基本原则
1、单一职责原则
一个类只能有一个职责。一个类(大到模块,小到方法)承担的职责越多,它被复用的可能性就越小,而且一个类承担的职责过多,就相当于将这些职责耦合在一起,当其中一个职责变化时,可能会影响其他职责的运作,因此要将这些职责进行分离,将不同的职责封装在不同的类中。
2、开闭原则
一个软件实体应该对扩展开放,对修改关闭。即软件实体尽量在不修改原有代码的情况下进行扩展。
3、里氏代换原则
所有引用父类的地方必须能透明地使用其子类的对象。
4、依赖倒置原则
高层模块不应该依赖低层模块,抽象不应该依赖细节,细节应该依赖抽象。要面向接口编程,不要面向实现编程。
5、接口隔离原则
使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口。当一个接口太大时,我们需要考虑将它分离成一个更小的接口。
6、迪米特法则
尽量减少对象之间的交互,如果两个对象之间不必彼此直接通信,那么这两个对象就不应当发生任何直接的相互作用,如果其中一个对象需要调用另一个对象的某一个方法的话,可以通过第三者转发这个调用。
二、设计模式总览
三、具体代码实现
工厂设计模式
??模式?称???法模式,是?种创建型设计模式,其在?类中提供?个创建对象的?法, 允许?类 决定实例化对象的类型。
这种设计模式也是 Java开发中最常?的?种模式,它的主要意图是定义?个 创建对象的接?,让其? 类??决定实例化哪?个??类,??模式使其创建过程延迟到?类进?。
简单说就是为了提供代码结构的扩展性,屏蔽每?个功能类中的具体实现逻辑。让外部可以更加简单的 只是知道调?即可,同时,这也是去掉众多ifelse的?式。
当然这可能也有?些缺点,?如需要实现 的类?常多,如何去维护,怎样减低开发成本。但这些问题都可以在后续的设计模式结合使?中,逐步 降低。
抽象工厂设计模式
抽象工厂设计模式(Abstract Factory Design Pattern)是一种创建型设计模式,旨在提供一个接口用于创建相关或依赖对象的家族,而无需明确指定它们的具体类。这种模式属于工厂模式的一种扩展,它通过提供一个接口来创建一系列相关或相互依赖的对象,而不需要指定这些对象的具体类。
建造者设计模式
建造者模式所完成的内容就是通过将多个简单对象通过?步步的组装构建出?个复杂对象的过程。
它的主要目的是将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。
原型设计模式
原型模式主要解决的问题就是创建重复对象。这部分对象内容本身比较复杂,生成过程耗时较长,因此使用clone()方法节省时间
这种场景经常出现在我们身边,只不过很少用到自己的开发中,就像CV复制代码,类中的clone()方法。
单例设计模式
单例模式是整个设计中最简单的模式之一。
单例模式主要解决的是哪怕多线程同时访问,一个类也只能有一个实例。
本节介绍7种单例模式的实现:懒汉模式(线程不安全)、懒汉模式(线程安全)、饿汉模式(线程安全)、使用类的内部类(线程安全)、双重锁校验(线程安全)、CAS[AtomicReference](线程安全)、Effective Java作者推荐的枚举单例(线程安全)。
五种设计模式的主要代码以及实现包
代码实现在文章顶部显示,由于代码量较大,再次仅贴出代码目录以及部分代码,不过多占用文章篇幅。
抽象工厂:
public class Client {
private Button button;
private Window window;
public Client(GUIFactory factory){
button = factory.createButton();
window = factory.createWindow();
}
public void renderUI(){
button.render();
window.render();
}
public static void main(String[] args) {
GUIFactory factory;
String name = System.getProperty("os.name").toLowerCase();
if(name.contains("windows")){
factory = new WindowsGUIFactory();
}else{
factory = new MacOSGUIFactory();
}
Client client = new Client(factory);
client.renderUI();
}
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!