前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java设计模式 (1) 工厂模式,抽象工厂模式,单子模式

java设计模式 (1) 工厂模式,抽象工厂模式,单子模式

作者头像
曼路
发布2018-10-18 15:30:36
5120
发布2018-10-18 15:30:36
举报
文章被收录于专栏:浪淘沙浪淘沙

《一》 工厂模式


工厂模式就是实例化对象,用工厂方法代替new操作的一种模式,会给你系统带来更大的可扩展性和尽量少的修改量。

Car.java //创建接口 public interface Car { public void Price(); public void race(); }

bmw.java //接口实现 public class bmw implements Car { @Override public void Price() { // TODO Auto-generated method stub System.out.println(“100万元”); } @Override public void race() { // TODO Auto-generated method stub System.out.println(“最高时速300km/h”); } }

Volkswagen.java //接口实现 public class Volkswagen implements Car{ @Override public void Price() { // TODO Auto-generated method stub System.out.println(“20万元”); } @Override public void race() { // TODO Auto-generated method stub System.out.println(“最高时速150km/h”); } }

CarFactory.java //创建工厂 public class CarFactory { public Car style(String type){ if(“bmw”.equals(type)) { return new bmw(); } else if(“Volkswagen”.equals(type)){ return new Volkswagen(); } else{ System.out.println(“没有要找的类型”); return null; } } }

CarTest.java //测试工厂模式 public class CarTest {

public static void main(String[] args) {
    // TODO Auto-generated method stub
      CarFactory factory=new CarFactory();  //实例化
      Car car=factory.style("bmw");   
      car.Price();
      car.race();
      }

}

UML–工厂模式

这里写图片描述
这里写图片描述

《二》 抽象工厂模式


一个抽象工厂类,可以派生出多个具体工厂类。每个抽象产品类可以派生出多个具体产品类,每个具体工厂类可以创建多个具体产品类。将不变的部分提取出来,将可变的部分留作接口,以达到最大程度上的复用。

//car接口 Car.java public interface Car { public void price(); public void race(); }

 bmw.java

public class bmw implements Car {

@Override
public void price() {
    // TODO Auto-generated method stub
    System.out.println("宝马的价格是300万元");
}

@Override
public void race() {
    // TODO Auto-generated method stub
    System.out.println("宝马的速度可达到300km/h");
}

}

             Volkswagen.java

public class Volkswagen implements Car{ @Override public void price() { // TODO Auto-generated method stub System.out.println(“大众的价格是100万元”); } @Override public void race() { // TODO Auto-generated method stub System.out.println(“大众的速度为150km/h”); } }

  CarFactory.java

//工厂接口 public interface CarFactory { public Car produce(); }

 OneFactory

public class OneFactory implements CarFactory{ @Override public Car produce() { // TODO Auto-generated method stub return new bmw(); } }

   TwoFactory

public class TwoFactory implements CarFactory{ @Override public Car produce() { // TODO Auto-generated method stub return new Volkswagen(); } }

   Test_car 

public class Test_car { public static void main(String[] args) { // TODO Auto-generated method stub CarFactory factory=new OneFactory(); //找到工厂 Car car=factory.produce(); car.pric

UML
UML

() car.race();//生产产品

}

}


《三》 单子模式


保证单例类只能有一个实例,而且必须是自己创建自己的唯一实例,必须给所有其他对象提供这一实例。 //创建型模式,只能产生一个实例供外部使用, public class Single{ private static final Single s=new Single();//私有化 private Single(){}

public static Single getInstance(){
    return s;

}//定义一个静态方法并返回该类的实例

}

/**懒汉式是在类被主动调用时才会被实例化, 实现了类的延迟加载,此处通过两种方式来实现单例模式, 一种是通过双重校验锁的方式, 另一种是通过静态内部类的方式**/

//双重校验锁 public class Single1 { private static Single1 s=null; private Single1(){

 }
 public static Single1 getInstance(){

      if(s==null){
          synchronized (Single1.class){

              if(s==null){

                  s=newSingle1();
              }
          }           
      }  
      return s;    
 }

}

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年04月15日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 《一》 工厂模式
  • 《二》 抽象工厂模式
  • 《三》 单子模式
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档