GOF二十三种设计模式之工厂模式
2017-05-10 00:00
260 查看
先说一下面向对象设计的基本原则:
OCP:开放原则,一个软件的实体应当对扩展开放,对修改关闭。
DIP:依赖倒转原则,针对接口编程,不要针对实现编程。
LoD:迪米特法则,只与直接相关的类通信,避免和陌生人通信。
在平常的编程中,我们都是直接new一个对象,而在工厂模式中,将对象的创建统一进行管理和控制,将调用者与实现类进行解耦。
下边是一个简单的示例代码:
public interface Car {
void run();
}
public class Andi implements Car {
@Override
public void run() {
System.out.println("andi在跑");
}
}
public class Byd implements Car{
@Override
public void run() {
System.out.println("byd在跑");
}
}
public class CarFactory{
//写法1
public static Car getCar(String type){
if("andi".equals(type)){
return new Andi();
}else if("byd".equals(type)){
return new Byd();
}
return null;
}
//写法2
public static Cat getAndi(){
return new Andi();
}
public static Car getByd(){
return new Byd();
}
}
以上简单工厂模式的实现,第二种是工厂方法模式的实现:
public interface CarFactory {
Car createCar();
}
public class AndiFactory implements CarFactory{
@Override
public Car createCar() {
return new Andi();
}
}
public class BydFactory implements CarFactory{
@Override
public Car createCar() {
return new Byd();
}
}
如果新增加一个Benc类的话:如下:
public class BencFactory implements CarFactory{
@Override
public Car createCar() {
return new Benc();
}
}
测试如下:
public static void main(String[] args) {
Car c1 = new AndiFactory().createCar();
Car c2 = new BydFactory().createCar();
c1.run();
c2.run();
}
OCP:开放原则,一个软件的实体应当对扩展开放,对修改关闭。
DIP:依赖倒转原则,针对接口编程,不要针对实现编程。
LoD:迪米特法则,只与直接相关的类通信,避免和陌生人通信。
在平常的编程中,我们都是直接new一个对象,而在工厂模式中,将对象的创建统一进行管理和控制,将调用者与实现类进行解耦。
下边是一个简单的示例代码:
public interface Car {
void run();
}
public class Andi implements Car {
@Override
public void run() {
System.out.println("andi在跑");
}
}
public class Byd implements Car{
@Override
public void run() {
System.out.println("byd在跑");
}
}
public class CarFactory{
//写法1
public static Car getCar(String type){
if("andi".equals(type)){
return new Andi();
}else if("byd".equals(type)){
return new Byd();
}
return null;
}
//写法2
public static Cat getAndi(){
return new Andi();
}
public static Car getByd(){
return new Byd();
}
}
以上简单工厂模式的实现,第二种是工厂方法模式的实现:
public interface CarFactory {
Car createCar();
}
public class AndiFactory implements CarFactory{
@Override
public Car createCar() {
return new Andi();
}
}
public class BydFactory implements CarFactory{
@Override
public Car createCar() {
return new Byd();
}
}
如果新增加一个Benc类的话:如下:
public class BencFactory implements CarFactory{
@Override
public Car createCar() {
return new Benc();
}
}
测试如下:
public static void main(String[] args) {
Car c1 = new AndiFactory().createCar();
Car c2 = new BydFactory().createCar();
c1.run();
c2.run();
}
相关文章推荐
- GOF二十三种设计模式之单例模式
- 学习GoF设计模式的重要性
- GoF 23个经典的设计模式8--结构模式之 Composite组合模式(未完代续)
- GoF 23个经典的设计模式6--结构模式之适配器模式(未完代续)
- GoF 23个经典的设计模式05--创建模式之单例模式(未完代续)
- GoF 23个经典的设计模式01--创建模式之抽象工厂(未完代续)
- 人间万象“23式”—— GOF 23种设计模式
- GOF设计模式学习小结(一)
- 从GOF的设计模式说起
- GoF 23个经典的设计模式04--创建模式之原型模式(未完代续)
- GOF 23个基本的设计模式
- 关于Gof设计模式的精辟总结
- GoF的设计模式与模式
- GOF设计模式-创建型模式理解与思索(一)(Abstract Factory 和Builder)
- 追MM“23式”—— GOF 23种设计模式
- 追mm与23种gof设计模式【转载】
- 学习GoF设计模式的重要性
- GoF 23个经典的设计模式03--创建模式之工厂方法(未完代续)
- GoF 23个经典的设计模式02--创建模式之创建者模式(未完代续)
- 为UML争吵没有意思,还是把基础打好,看"学习GoF设计模式的重要性"!