1,首先说,什么是设计模式?设计模式为什么会出现?它的出现是为了解决什么问题?
设计模式,design pattern,是一套被反复使用,多数人知晓的,代码设计经验的总结。
设计模式是为了1,提高代码重用性,2,提高代码可扩展性,3,代码更容易被他人所理解,提高代码可读性,保证代码可靠性。
代码引入设计模式的目的大概是以上3个目的, 如何实现这3个目的呢,方式就是,千方百计的降低代码耦合度来实现,引入设计模式也是为了降低代码耦合度从而实现那3个目的。
什么是耦合?怎么解耦和?
其实耦合就是系统内部各个部分之间关联度太高了,牵一发动全身。解耦和就是降低这各个部分之间的关联,解耦和的原则,其实就是设计模式的6大原则,如何解耦和?很简单,其实就是隔离变化,分离变化,将变化的部分单独隔离出来进行处理,这样就降低了各部分之间的关联度,因为已经将一个大部分拆成了很多小部分,
每一种设计模式的出现,都是为了解决现实开发中不断重复发生的问题而不断积淀产生的,可以说,任何一种设计模式,都完美的解决了一种不断重复出现的问题,或者说,是某一种问题的核心的解决方案,设计模式就想模板,使代码编程工程化,实现工厂中流水线一样的作业。
首先说说使用最广泛,最简单的工厂模式,
什么是工厂模式?从字面意思,似乎想到的是一个factory,进去的是原料,出来的是产品,这就是工厂,设计模式,当然是现实的高度抽取,但是又是来自于现实的情景,通过代码解释似乎更否和程序员的逼格。
工厂模式(Factory Method)
没对比就没有伤害,对比一下使用和没使用工厂模式的区别,然后再对工厂进行优化。
1,没有使用工厂模式的情形
interface Fruit{
// 定义一个水果接口
public void eat() ; // 吃水果
}
class Apple implements Fruit{
public void eat(){
System.out.println("** 吃苹果。") ;
}
};
class Orange implements Fruit{
public void eat(){
System.out.println("** 吃橘子。") ;
}
};
public class InterfaceCaseDemo03{
public static void main(String args[]){
Fruit f = new Apple() ; // 实例化接口
f.eat() ;
}
};
分析:
这里没有使用工厂,可以发现,代码并没有语法错误,但是设计的真的是糟糕透了,主方法相当于客户端,原则上来说,客户端的代码越少越好,客户端尽可能不要有大的频繁的改动。
然而子这里,可以发现,直接在主方法中指定了要操作的子类,客户端和子类实例紧紧的耦合在了一起,当我想扩展程序,当想要更换子类的时候,想更换一个Orange实例的时候,就肯定需要修改客户端,就必须得再客户端,把子类实例改为new Orangle();
就很不合理。
解决:既然发现是耦合度太高,解决方案当然就是解耦和了,
进一步分析:
可以发现,其实问题就是处在这一句代码中Fruit f = new Apple() ;
,就是这里存在变化,可能出现若干的不同类型的子类对象,使用父类对象接收子类实例,那么就可以从这个地方着手,隔离变化。
2,初步使用工厂
interface Fruit{
// 定义一个水果接口
public void eat() ; // 吃水果
}
class Apple implements Fruit{
public void eat(){
System.out.println("** 吃苹果。") ;
}
};