设计模式 之 三

一、单例模式

  1. 饱汉模式
    public class SinglePattern2 {
    	
    	private SinglePattern2 sp;
    
    	public SinglePattern2 getInstance() {
    		if (sp == null) {
    			return new SinglePattern2();
    		}
    		return sp;
    	}
    }

     

  2. 饿汉模式
    public class SinglePattern1 {
    	
    	private SinglePattern1 sp = new SinglePattern1();
    
    	public SinglePattern1 getInstance() {
    		return sp;
    	}
    }
    

    两种模式差别在有没有在类被加载时就给创建好对象,‘饿汉’ 即等不及了要吃东西所以要提前创建好对象,‘饱汉’正好相反

二、模板方法

给出算法的骨架,具体由实现类去实现。

public abstract class Account {

	private int year;
	private double fund;

	
	public Account(int year, double fund) {
		super();
		this.year = year;
		this.fund = fund;
	}

	public int getYear() {
		return year;
	}

	public void setYear(int year) {
		this.year = year;
	}

	public double getFund() {
		return fund;
	}

	public void setFund(double fund) {
		this.fund = fund;
	}

	// 具体账户计算所获得信息必须先实现该账户的利率
	public double getInterest() {
		return fund * getInterestRate();
	}

	public abstract double getInterestRate();
}
public class AccountA extends Account {
	private static final double INTEREST = 0.03; 
	
	public AccountA(int year, double fund) {
		super(year, fund);
	}

	@Override
	public double getInterestRate() {
		return super.getYear() * INTEREST;
	}
}
public class Test {
	public static void main(String[] args) {
		AccountA a = new AccountA(3,20000);
		System.out.println(a.getInterest());
	}
}

三、工厂模式

简意:定义一个接口,具体实体类继承这个接口,然后定义一个工厂类,可以从中获取任意的一个实体类,而不用去了解其创建过程

public interface Runnable {
	
	void run();
	
}
public class Dog implements Runnable {

	@Override
	public void run() {
		System.out.println("Dog runs");
	}

}
public class Cat implements Runnable {

	@Override
	public void run() {
		System.out.println("Cat runs");
	}

}
public class Pig implements Runnable {

	@Override
	public void run() {
		System.out.println("Pig runs");
	}

}
public class AnimalFactory {
	
	public Runnable getAnimal(String animalType){
		if(animalType.equalsIgnoreCase("Dog")){
			return new Dog();
		}else if(animalType.equalsIgnoreCase("Cat")){
			return new Cat();
		}else if(animalType.equalsIgnoreCase("Pig")){
			return new Pig();
		}else {
			return null;
		}
		
	}
	
	public static void main(String[] args) {
		new AnimalFactory().getAnimal("Dog").run();
		new AnimalFactory().getAnimal("Cat").run();
		new AnimalFactory().getAnimal("Pig").run();
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值