浅谈设计模式
一、 单例模式
官方定义:Ensure a class has only onstance , and provide a gobal point of access to it.(确保毛一个类只有一个实例,而且自行实例化并向整个系统提供这个实例)
通俗说:在古代,一个国家只能有一个皇帝,皇帝每天要上朝接待臣子、处理政务,但皇帝是唯一的,我们就只有将构造函数设置为private私有反复权限,从而禁止外部创建对象了。一般分为两个类,一个是Emperor(皇帝类),一个是Minnister(臣子类)。
?
?
//抽象模板类public abstract class AbstractClass{//基本方法protected abstract void doSomething();//基本方法protected abstract void doAnything();//模板方法public void templateMethod(){//调用基本方法,完成相关的逻辑功能this.doSomething();this.doAnything();}}//具体模板类public class ConCreteClass1 extends AbstractClass{//实现基本方法protected void doSomething(){}protected void doAnything(){}}public class ConCreteClass2 extends AbstractClass{//实现基本方法protected void doSomething(){}protected void doAnything(){}}//场景类public class Client{public static void main(String[] args){AbstractClass class1=new ConCreteClass1();AbstractClass class2=new ConCreteClass2();//调用模板方法class1.templateMethod();class2.templateMethod();}}?
?
?
优点:①封装可变部分,扩展不变部分,把认为不变的算法封装到父类实现,而可变的则可以通过继承继续扩展;
?②提取公共部分的代码,便于维护;
?③行为有父类控制,子类实现,基本方法是有子类实现的,因此子类可以通过扩展的方式增加相应的功能
?
缺点:一般情况下,抽象类负责声明最抽象、最一般的事物的属性和方法,实现类完成具体的事物属性和方法。但模板方法颠倒了,抽象了定义了部分具体的抽象方法,有子类实现,子类执行的结果影响了父类的结果。
?
应用场景:①多个子类有公共的方法,并且逻辑基本相同;
? ? ? ?②重要、复杂的算法,可以核心的算法设计为模板
?
?