JAVA常用设计模式总结(单例,工厂,抽象工厂)

设计模式常常被分为以下三类:

创建型

创建对象时,不再由我们直接实例化对象;而是根据特定场景,由程序来确定创建对象的方式。如,工厂方法、抽象工厂模式、单例模式等。

构造型 用于帮助将多个对象组织成更大的结构。如,适配器模式、桥接模式、组合器模式等。

行为型 用于帮助系统间对象的通信,以及如何控制复杂系统中的流程。如,命令模式、解释器模式、迭代器模式等。

一、单例模式

public class Singleton {
 public static Singleton instance;

 private Singleton() {
 }
 public static Singleton getInstance() {
  if (instance == null) {
   instance = new Singleton();
  }
  return instance;
 }
 public static void main(String[] args) {
  Singleton instance1 = Singleton.getInstance();
  Singleton instance2 = Singleton.getInstance();
  System.out.println(instance1 == instance2);
 }
}


(Spring中只需在配置实体Bean中指定 scope="singleton",便可实现单例)

二、简单工厂

当A实例需要调用B实例的方法时,不是通过new B实例,而是通过一个能创建B实例的工厂BFactory来实现。

B b=new B();---à B b=BFactory().getB();

略为改进后变为:

当A实例需要调用某种方法时,这种方法可以由B实例或B1实例实现。那么我们定义一个接口IB,让B和B1实现该接口。并且写一个IB工厂IBFactory,提供一个getIB()方法

public class A{

private IB ib;

public A(IB ib){

this.ib=ib;

}

public void showMessage(){

ib.print();

}

}

public interface IB{

public abstract void print();

}

 

public class B implements IB{

public void print(){

}

}

 

public clsss B1 implements IB{

public void print(){

}

}

 

public IBFactory{

public IB getIB(){

return new B();

}

}

 

--------------------------

IB ib=IBFactory.getIB();

A a=new A(ib);

a.showMessage();

----------------------------


 

抽象工厂模式图:



三、工厂方法和抽象工厂

在简单工厂模式里,系统使用ProductFactory工厂类生产所有产品实例,且工厂类来决定生产那个类的实例。

3.1 工厂方法 在工厂方法中,如果我们不想在工厂类中进行逻辑判断,程序可以为不同产品类提供不同的工厂,不同的工厂类生产不同的产品。

采用工厂方法后,客户端代码成功与被调用对象的实现类分离。

3.2 抽象工厂模式:为了解决客户端代码与不同工厂耦合的问题,接着考虑再增加一个工厂类,该类生产OutputFactory实例(根据传入的参数,生产不同的工厂实例)

public class OutputFactoryFactory {

public static OutputFactory getOutputFactory(String type) {

if ("better".equalsIgnoreCase(type)) {

return new BetterOutputFactory();

} else {

return new OutputFactory();

}

}

}


 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值