浅谈Java设计模式第一篇

java创建型设计模式

一、单例模式:一个类只有一个实例,并提供一个访问的全局访问点

public   class   Singleton{

      private Static Singleton singleton = null;

      private Singleton(){}

     public Static Singleton getInstance(){

                 if(singleton==null){

                         singleton = new Singleton();

                 }

                   return singleton;

       }

}

二:工厂模式

分为工厂方法模式(普通工厂方法模式,多个工厂方法模式,静态工厂方法模式),抽象工厂方法模式两大类,两者区别在于前者工厂类会随着其它类功能增加而要不断修改,不易于扩展,而后者直接增加工厂类不用修改其它类。

普通工厂方法模式:

public Interface Animal(){

       public void eat();

}

public Class Cattle implements Animal{

     public void eat(){

         system.out.println("牛吃草");   

  }

}


public Class cat implements Animal{

     public void eat(){

         system.out.println("猫吃鱼");   

  }

}

public Class AnimalFactory{

     public  Animal   getAni(String str){

         if("牛".equals(str)){

              return new Cattle();

         }else if("猫".equals(str)){

            return new Cat(); 

         }else{

             throw Excepion("无该动物");

         }

   }

}

public Class FactoryTest(){

      public static void main(str[] args){

          AnimalFactory  facTest = new AnimalFactory();

          Animal animal = facTest.getAni("牛");

         animal.eat();

      }

}

多个工厂方法模式:

把工厂类做如下修改

public Class AnimalFactory{

     public Animal getCattle(){ 

          return new Cattle();

}

   public Animal getCat(){

          return new Cat();

    }

}


静态工厂方法模式:

把上面工厂类里的方法变为静态方法,加上static关键字


抽象工厂方法模式:增加一个接口,所有工厂类实现该接口,不用改变以前工厂类,若功能改变,只增加相应的工厂类即可

public Interface Animal{

    public void eat();

}

public Class Cattle  implements  Animal{

      public void eat(){

          system.out.println("牛吃草");

     }           

}

public Class Cat implements Animal{

   public  void eat(){

       system.out.println("猫吃鱼");

 }

}

public Interface Provider{

     public Animal  providerAnimal();

}

public Class CattleFactory implements Provider{


           public Animal providerAnimal(){

               return new Cattle();  

  }

}


public Class CatFactory implements Provider{

   

         public Animal providerAnimal(){

              return new Cat();

    }

}


public Class FactoryTest{

    public static void main(String[] args){

         Provider provider = new CatFactory();

       Animal animal = provider.providerAnimal();

       animal.eat();

}

}


三、建造模式

与工厂模式的区别在于:工厂模式只是针对单个类的产品,而建造模式是符合要求对象的集合

public Class Builder{

   public List<Animal> list = new ArrayList<Animal>();

  public  List<Animal> buildCattle(int count){

       for(int i=0;i<count;i++){

            list.add(new Cattle());   

}

   return list;

}

    public List<Animal>  buildCat(int count){

        for(int i=0;i<count;i++){

         list.add(new Cat());

}

     return list;

}    

}

public Class  BuildTest{

    public static void main(String[] args){

        Builder build = new Builder();

        List<Animal> list = build.buildCattle(10);

}

}


四 、原型模式

原型模式分为浅复制模式、深复制模式

浅复制模式:基本数据类型的复制,引用类型仍是原对象所指向的

深复制模式:基本数据类型和引用类型都进行复制,是完全彻底的复制

public Class  Prototype  implements Clonnable,Serializeable{

       private static final String SerializeId = 1L;

        private  SerializeableObj  serializeableObj;

       private String str;

        public void setSerializeableObj(SerializeableObj serializeableObj){

                 serializeableObj = this.serializeableObj;


}

     public SerializeableObj  getSerializeableObj(){ 

         return serializeableObj; 

}

   public void setStr(String string){

          str= this.string;

}

public String getStr(){

       return str;

}


//浅复制

public Object clone() throws CloneNotSupportedException {

      Prototype prototype = (Prototype)Super.clone();

      return prototype;

}


//深复制

public Object  deepClone() IOException, ClassNotFoundException{

     ByteArrayOutputStream  bos = new ByteArrayOutputStream();

     ObjectOutputStream   os  = new ObjectOutputStream(bos);

    os.writeObject(this);


   ByteArrayInputStream bis = new  ByteArrayInputStream(bos.toByteArray());

  ObjectInputStream ois = new ObjectInputStream(bis);

 return ois.readObject();

}


Class   SerializeableObj   implements Serializeable{

       public static final String    SerializeId = 2L;

        

    

}






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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值