设计模式(23种,java)

工厂模式

设计模式的介绍的详细博客。
http://blog.csdn.net/longyulu/article/details/9159589

工厂模式,主要是在不知道哪个具体的对象去某个事情的时候,我们需要一个帮助类去管理这些对象,因为这些对象都可以干这件事情,只是具体做法不同而已,如果我们每次都去new一个对象的化,代码变的非常繁杂和无序,而通过工厂类的办法,我们只需要修改类名,就可以轻松的完成功能了,这就是工厂模式。具体看代码,好好体会一下了。

package com.ation;

//动物接口
interface IAnimal {
    public void eatFood();
}

//具体的对象,人类
class People implements IAnimal {
    @Override
    public void eatFood() {
    // TODO Auto-generated method stub
    System.out.println("吃米饭");
    }
}
//狗
class Dog implements IAnimal {
    @Override
    public void eatFood() {
    // TODO Auto-generated method stub
    System.out.println("吃骨头");
    }
}
//猫
class Cat implements IAnimal {
    @Override
    public void eatFood() {
    // TODO Auto-generated method stub
    System.out.println("吃鱼");
    }
}

//工厂类,作用,主要在我们不知道具体类的情况下,我们只知道有个事情需要有人去做,比如eatFood,但我们不知道谁去做,可能是人,狗,猫
//如果我们没有工厂类的情况下,我们可能每次都需要new一个实体对象出来,然后去做某个事情。现在我只需要知道名字,就可以派人去做,随时可以更换

class Factory {
    public static IAnimal getInstance(String type) {
    if ("Cat".equals(type)) {
        return new Cat();
    }else if("Dog".equals(type)){
        return new Dog();
    }else if("People".equals(type)){
        return new People();
    }else{
        System.out.println("输出类型不对,请检查!");
        return null;
    }
    }
}

public class Test {
    public static void main(String[] args) {
        IAnimal animal = Factory.getInstance("Cat");
        animal.eatFood();       
    }
}

抽象工厂模式

抽象工厂模式和工厂模式很像,但是有点区别,就在与我们设计的时候工厂模式对象的往往是某一个事情,而往往抽象工厂模式对应的确实有多个相关的产品需要去做,但我们也不想每次都需要new一个对象,我们希望有个单独的对象去做这个事情,我们只需要管理这个对象就ok了。这个类就是抽象工厂模式。

interface IMobliePhone {
    public void puduct();
}

interface IUSB {
    public void puduct();
}


class MobliePhone implements IMobliePhone{
    @Override
    public void puduct() {
        // TODO Auto-generated method stub
    System.out.println("生产手机");
    }
}
class Usb implements IUSB{
    @Override
    public void puduct() {
        // TODO Auto-generated method stub
        System.out.println("生产USB");
    }
}

interface IAbstraFactory{
    public IMobliePhone createMobliePhone();
    public IUSB     createUSB();
}

class AbstraFactory implements IAbstraFactory{
    @Override
    public IMobliePhone createMobliePhone() {
        // TODO Auto-generated method stub
        return new MobliePhone();
    }
    @Override
    public IUSB createUSB() {
        // TODO Auto-generated method stub
        return new Usb();
    }
}

public class Test {
    public static void main(String[] args) {

    AbstraFactory factory = new AbstraFactory();
    factory.createMobliePhone().puduct();
    factory.createUSB().puduct();
    }
}

单例模式

单例模式顾名思义,我们知道这种模式表示,程序中只能存在一个对象,不能够重复创建,例如生活中常见的战斗机飞行员一般只能存在一个在控制飞行,多了,就会发生危险。
这种设计模式,一般特点是构造函数私有化。

// 单例模式,构造方法私有化是主要特点
class Singleton {
    // 私有静态实例,外界无法访问,在第一个访问为null,分配实例
    private static Singleton instance = null;

    // 构造方法私有化
    private Singleton() {
    }
    //静态调用
    public static Singleton getInstance() {
    if (instance == null) {
        instance = new Singleton();
    }
    return instance;
    }

    public void showInfo() {
    System.out.println("单例模式");
    }
}

//测试
public class Test {
    public static void main(String[] args) {
    Singleton.getInstance().showInfo(); 
    }
}

原型模式

原型模式意思很简单:就是对当前对象进行复制,因为这个复制产生的消耗比new要小的多,所以一般会有原型模式的使用

// 原型模式(Prototype),对当前存在的对象进行复制
//浅复制:将一个对象复制后,基本数据类型的变量都会重新创建,而引用类型,指向的还是原对象所指向的。
//深复制:将一个对象复制后,不论是基本数据类型还有引用类型,都是重新创建的。简单来说,就是深复制进行了完全彻底的复制,而浅复制不彻底。
class Prototype implements Cloneable, Serializable {  

    private static final long serialVersionUID = 1L;  
    private String string;  

    private SerializableObject obj;  

    /* 浅复制 */  
    public Object clone() throws CloneNotSupportedException {  
        Prototype proto = (Prototype) super.clone();  
        return proto;  
    }  

    /* 深复制 *,二进制流复制*/  
    public Object deepClone() throws IOException, ClassNotFoundException {  

        /* 写入当前对象的二进制流 */  
        ByteArrayOutputStream bos = new ByteArrayOutputStream();  
        ObjectOutputStream oos = new ObjectOutputStream(bos);  
        oos.writeObject(this);  

        /* 读出二进制流产生的新对象 */  
        ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());  
        ObjectInputStream ois = new ObjectInputStream(bis);  
        return ois.readObject();  
    }  

    public String getString() {  
        return string;  
    }  

    public void setString(String string) {  
        this.string = string;  
    }  

    public SerializableObject getObj() {  
        return obj;  
    }  

    public void setObj(SerializableObject obj) {  
        this.obj = obj;  
    }  

}  

class SerializableObject implements Serializable {  
    private static final long serialVersionUID = 1L;  
}  

建造者模式

建造者模式教程
建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值