设计模式介绍
面向对象思想设计原则:
1,单一职责原则:高内聚,低耦合。
每个类只有一个职责,对外只能提供一种功能,
引起类发生变化的原因应该只有一个,所有的设计模式都应该遵循这个原则。
2,开闭原则:对扩展开放,对修改关闭。尽量面向抽象或接口编程。
3,里氏替换原则:任何父类出现的地方,都可以拿它的子类对象来替代。
4,依赖注入原则:要依赖于抽象,不要依赖具体实现。
5,接口分离原则:不应该强迫程序依赖它们不需要使用的方法。
也就是一个接口不应该提供太多的行为,一个接口应该只提供一种对外的功能。
6,迪米特原则:一个对象应当对其他对象尽少的了解(低耦合),
降低各对象之间的耦合,提高系统的可维护性,在模块之间面向接口编程,
而不理会模块的内部工作原理,使耦合度降到最低,促进软件的可复用性。
设计模式概述:
--设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类编目的、
代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、
保证代码的可靠性。
--设计模式不是一种方法和技术,而是一种思想。
--设计模式和具体的语言无关,学习设计模式就是要建立起面向对象的思想,
尽可能的面向接口编程,低耦合高内聚,使设计的程序可复用。
--学习设计模式能够促进对面向对象思想的理解,反之亦然,它们相辅相成。
设计模式的分类:
创建型模式 : 对象的创建
--简单工厂模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式、单例模式(6个)
结构型模式:对象的组成(结构)
--外观模式、适配器模式、代理模式、装饰模式、桥接模式、组合模式、享元模式(7个)
行为型:对象的行为
--模板方法模式、观察者模式、状态模式、职责链模式、命令模式、访问者模式、
策略模式、备忘录模式、迭代器模式、解释器模式(10个)
一,单例模式:(保证类在内存中只有一个对象)
//饿汉式:(不会出问题 jdk6中Runtime类就是典型的饿汉式)
public class Singleton{
private static Singleton instance =new Singleton();
private Singleton(){
}
public static Singleton getInstance(){
return instance;
}
}
//懒汉式:
//a:体现懒加载思想
//b:可能会有线程安全问题 所以要加synchronized关键字
public class Singleton{
private static Singleton instance=null;
private Singleton(){
}
public static synchronized Singleton getInstance(){
if(instance==null){
instance=new Singleton();
}
return instance;
}
}
二,模板设计模式:模板方法模式就是定义一个算法的骨架,
而将具体的算法延迟到子类中实现。
public abstract class TemplatePattern {
//该方法用于计算某算法的运行时间,具体算法由其子类实现
long start =System.currentTimeMillis();
method();
long end=System.currentTimeMillis();
return 0;
}
public abstract void method();
}
三,装饰设计模式:装饰设计模式就是使用被装饰类的一个子类的实例,
在客户端将这个子类的实例交给装饰类,是继承的替代方案。
例子:
java中装饰设计模式应用的例子:
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
Scanner sc=new Scanner(System.in); //这里只装饰了一次,上面两个装饰了两次