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


《一》 工厂模式


工厂模式就是实例化对象,用工厂方法代替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()
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;    
 }

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值