面向对象高级篇--设计模式

一、工厂模式

在这里插入图片描述
直接获取实例与使用工厂类获取实例:(假设main方法为客户端)
直接获取实例时当修改或者添加子类,需要修改客户端
通过工厂获取实例时当子类扩充,只需要直接修改工厂类,客户端只需要根据标记即可获取相应的实例。同时,工厂模式一定程度上隐藏了实现细节,对于客户端当需要一个苹果时,只需要输入Apple即可获取,而不是new Apple去获取。

//
interface Fruit{
	public void eat();
}

class Apple implements Fruit{
	public void eat() {
	    System.out.println("eat Apple");
	}
}

class Orange implements Fruit{
	public void eat() {
		System.out.println("eat orange");
	}
}
//工厂  通过工厂类的getInstace方法获取实例。
class Factory{
	
	public static Fruit getInstance(String className) {
		
		if("Apple".equals(className)){
			return new Apple();
		}else if("Orange".equals(className)) {
			return new Orange();
		}
		return null;
	}
}
public class FactoryMode {
	public static void main(String[] args) {
		//直接实例化接口
		new Apple().eat();
		new Orange().eat();
		
		System.out.println("");
	    //使用工厂获取实例
		Factory.getInstance("Apple").eat();
		Factory.getInstance("Orange").eat();
	}
}

输出结果:
在这里插入图片描述

二、代理模式——代理设计

在这里插入图片描述
1、代理设计指一个代理主题来操作真实主题,真实主题执行具体的业务操作,而代理主题负责其它相关业务的处理。
优点:
1).职责清晰
真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成一件完成事务,附带的结果就是编程简洁清晰。
(2).代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了中介的作用和保护了目标对象的作用。
(3).高扩展性
常用的三种代理模式参考文章
例:

package com.shuai.ChapterSix;

interface Network{
	public void browe();
}

//上网操作真实实现类
class Real implements Network{
	public void browe() {
		System.out.println("上网浏览信息");
	}
}

//代理类  检查信息 ,调用真实请求
class Proxy implements Network{
	private Network network;
	public Proxy(Network network) {
		this.network=network;
	}
	//对真实上网操作的扩展
	public void check() {
		System.out.println("检查操作");
	}
	
	public void browe() {
		this.check();
		this.network.browe();
	}
}

public class ProxyMode {
	public static void main(String[] args) {
		Network net=new Proxy(new Real());
		net.browe();
	}
}

结果:

在这里插入图片描述

三、适配器模式

当一个类要实现一个接口时,必须覆写此接口的全部抽象方法,如果接口中定义的方法过多,且实现类并不需要接口中的所有方法时,可以设计一个中间过渡,而该过渡又不想被直接调用,可设计一个抽象类实现接口,并实现接口中的方法(没有方法体),实现类再继承该抽象类来并可以选择性的实现一些方法。
例:

package com.shuai.ChapterSix;
 
/**
 * 适配器模式
 * @author guai
 *
 */

interface Window{
	public void open();
	public void close();
	public void show();
	public void activated();//窗口活动
	public void iconified();//窗口最小化
	public void deiconified();//关闭窗口最小化
	
}
abstract class WindowAdapter implements Window{
	public void open() {}
	public void close() {}
	public void show() {}
	public void activated() {}
	public void iconified() {}
	public void deiconified() {}
}

class WindowImpl extends WindowAdapter{
	public void open() {
		System.out.println("open window");
	}
	public void close() {
		System.out.println("close window");
	}
}
public class AdapterMode {
	public static void main(String[] args) {
		WindowImpl win= new WindowImpl();
		win.open();
		win.close();
	}
}

结果:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值