重点:单例模式、工厂方法模式、建造者模式、适配器模式(类/对象)、代理模式、装饰器模式、迭代器模式、模板方法模式、策略模式、责任链模式、观察者模式
1、设计模式的分类
创建型模式
用于描述“怎么样创建对象”,它的主要特征是“将对象的创建与使用分离”。GOF书中提到了单例、原型、工厂方法、抽象工厂、建造者等5种创建型模式。
结构型模式
用于描述如何将类或对象按某种布局组成更大的机构,GOF书中提到了代理、适配器、桥接、装饰、外观、享元、组合等7种结构型模式。
行为模式
用于描述类或对象怎么样相互协作共同完成单个对象无法单独完成的任务,以及怎么样分配职责。GOF书中提供了模板方法、策略、命令、职责链、状态、观察者、中介者、迭代器、访问者、备忘录、解释器等11种行为模式。
2、软件设计原则
在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据6条原则来开发程序,从而提高软件开发效率、节约软件开发成本和维护成本。
开闭原则
对扩展开放,对修改关闭。在程序需要进行扩展的时候,不能去修改原有的代码,实现一个热插拔的效果。简言之,是为了使程序的扩展性好,易于维护和升级。
想要达到这样的效果,我们要使用接口和抽象类。
因为抽象灵活性好,适应性广,只要抽象的合理,可以基本保持软件架构的稳定。而软件中易变的细节可以从抽象派生来的实现类来进行扩展,当软件需要发生变化时,只需要根据需求重新派生一个实现类来扩展就可以了。
1 package com.itheima.principles.demo1; 2 3 /** 4 * 设计原则:开闭原则 5 * 案例:搜狗输入法皮肤案例 抽象皮肤类 6 */ 7 public abstract class AbstractSkin { 8 9 /** 10 * 显示皮肤抽象方法 11 */ 12 public abstract void display(); 13 }
1 package com.itheima.principles.demo1; 2 3 /** 4 * 设计原则:开闭原则 5 * 案例:搜狗输入法皮肤案例 默认皮肤类 6 */ 7 public class DefaultSkin extends AbstractSkin { 8 @Override 9 public void display() { 10 System.out.println("默认皮肤"); 11 } 12 }
1 package com.itheima.principles.demo1; 2 3 /** 4 * 设计原则:开闭原则 5 * 案例:搜狗输入法皮肤案例 黑马皮肤类 6 */ 7 public class HeimaSkin extends AbstractSkin { 8 @Override 9 public void display() { 10 System.out.println("黑马皮肤"); 11 } 12 }
1 package com.itheima.principles.demo1; 2 3 /** 4 * 设计原则:开闭原则 5 * 案例:搜狗输入法皮肤案例 搜狗输入法类 6 */ 7 public class SougouInput { 8 private AbstractSkin skin; 9 10 public void setSkin(AbstractSkin skin) { 11 this.skin = skin; 12 } 13 14 public void display() { 15 skin.display(); 16 } 17 }
1 package com.itheima.principles.demo1; 2 3 /** 4 * 测试类 5 */ 6 public class Client { 7 public static void main(String[] args) { 8 // 1 创建搜狗输入法对象 9 SougouInput sougouInput = new SougouInput(); 10 // 2 创建默认皮肤对象 11 DefaultSkin defaultSkin = new DefaultSkin(); 12 // 3 设置默认皮肤到输入法 13 sougouInput.setSkin(defaultSkin); 14 // 4 展示皮肤 15 sougouInput.display(); 16 17 // 设置黑马皮肤并展示 18 HeimaSkin heimaSkin = new HeimaSkin(); 19 sougouInput.setSkin(heimaSkin); 20 sougouInput.display(); 21 } 22 }
以上代码搜狗皮肤案例实现了开闭原则,定义了抽象皮肤类,让特定皮肤类(默认皮肤、黑马皮肤)继承抽象皮肤类,去实现特定的皮肤功能,在搜狗输入法使用时,只需要设置具体的皮肤给输入法就可以实现换肤,不用修改原来的代码,并且自己设计一个皮肤时,只需要重新定义一个类即可,方便扩展,在使用时实现了热插拔。
标签:搜狗,输入法,皮肤,模式,display,设计模式,public From: https://www.cnblogs.com/record-100/p/18457355