java常见的几种设计模式

一、工厂模式

工厂模式就是将程序中创建对象的操作单独出来处理,这种模式的灵活性很高,如果以后还有子类的扩充,只需要修改工厂类即可。

例如:

abstract class Fruit{
	public abstract void eat();
}

class Apple extends Fruit{
	@Override
	public void eat() {
		System.out.println("我吃的是苹果");
	}
}

class Orange extends Fruit{
	@Override
	public void eat() {
		System.out.println("我吃的是橘子");
	}
}

public class FruitFactory {

	public static Fruit getInstance(String className){
		if("apple".equals(className))
			return new Apple();
		else if("orange".equals(className))
			return new Orange();
		else
			return null;
	}
	
	public static void main(String[] args) {
		Fruit f=FruitFactory.getInstance("apple");
		f.eat();
	}
}

 首先创建了一个水果的抽象类,定义了一个抽象方法eat(),之后定义了苹果和橘子两个水果的子类,具体实现eat方法。FruitFactory就是一个水果工厂类,根据参数的不同,返回不同的水果子类。

 

二、代理模式

代理设计就是指由一个代理主题来操作真实的主题,真实主题执行具体的业务操作,而代理主题负责其他业务的处理,类似于我们生活中通过代理来上网。

interface Network{
	public void getNet();
}

class Real implements Network{
	@Override
	public void getNet() {
		System.out.println("获得网络,成功上网。");
	}
	
}

class Proxy implements Network{
	public Network network;
	
	public Proxy(Network network){
		this.network=network;
	}
	private void check(){
		System.out.println("用户名密码正确");
	}
	@Override
	public void getNet() {
		this.check();
		network.getNet();
	}
	
}

public class NetworkProxy {
	public static void main(String[] args) {
		Network network=new Proxy(new Real());
		network.getNet();
	}

}

 首先定义一个上网接口,只有一个获取网络的方法。之后定义一个真实上网的类和代理上网的类都实现这个接口,而在代理类中需要设置被代理的真实操作并增加自己的业务。

 

三、适配器模式

在java中,一个类要实现一个接口必须覆写接口的所有抽象方法,如果一个接口定义的抽象方法过多,子类根本不需要这么多方法,这个时候我们可以定义一个中间的过渡,这个过渡类并不能直接被使用,则将其定义为抽象类,也就是适配器类。

interface Window{
	public void open();
	public void close();
	public void browse();
	public void play();
}

abstract class WindowAdapter implements Window{
	public void open(){};
	public void close(){};
	public void browse(){};
	public void play(){};
}

class Window1 extends WindowAdapter{
	public void open(){
		System.out.println("系统开启");
	}
	public void close(){
		System.out.println("系统关闭");
	}
}

class Window2 extends WindowAdapter{
	public void browse(){
		System.out.println("上网浏览信息");
	}
	public void play(){
		System.out.println("上网玩游戏");
	}
}
public class AdapterTest {
	public static void main(String[] args) {
		WindowAdapter adapter1=new Window1();
		WindowAdapter adapter2=new Window2();
		adapter1.open();
		adapter2.browse();
		adapter2.play();
		adapter1.close();
	}
}

 定义一个window接口,包含四个抽象方法,之后定义一个适配器类,覆写所有方法,方法体为空,适配器的子类则有选择的实现需要的方法。

 

四、单例模式

单例模式就是确保一个类只能有一个实例,这在spring框架中被广泛使用。

class A{
	private final static A a=new A();

	private A(){//避免使用new实例化对象
		
	}
	
	public static A getInstance(){
		return a;
	}
}

public class SingletonTest {
	public static void main(String[] args) {
		A a=A.getInstance();
		A aa=A.getInstance();
		System.out.println(a==aa);
	}
}

 通过以上例子可以发现,a对象和aa对象是完全相同的,即同一个实例。

精彩科技工作室
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值