/**
* 接口应用
*/
public class Main {
public static void main(String[] args) {
Person p = new Person("fish7");
p.setIsay(new BeforeGong());
p.say();
p.setIsay(new AfterGong());
p.say();
}
} class Person{ //只有在运行期才和say行为关联起来,这就叫面向接口编程
private String name;
private Isay isay; //把接口作为类中的一个属性(组合) public Person(String name){
this.name = name;
}
public void setIsay(Isay isay){ //可以传BeforeGong也可以传AfterGong
this.isay = isay;
}
public void say(){
isay.say();
}
}
interface Isay{ //把说话的行为抽象出一个接口
public void say(); //把可变化的行为抽象出来,定义成接口,并提供不同的实现
}
class BeforeGong implements Isay{
public void say(){
System.out.println("I'm a man.");
}
}
class AfterGong implements Isay{
public void say(){
System.out.println("I'm a woman~");
}
} /**
* 策略设计模式:定义了一系列的算法,将每一种算法封装起来并可以相互替换使用
* 策略模式让算法独立于使用它的客户应用而独立变化
* OO设计原则:
* 1.面向接口编程(面向抽象编程)
* 2.封装变化
* 3.多用组合,少用继承
*/
/**
* Object类:所有类的父类
*/
public class Main {
public static void main(String[] args) {
A a = new A("a");
System.out.println(a);
A b = new A("a");
A c = new A("b");
System.out.println(a.equals(b)); //输出true
System.out.println(a.equals(c)); //输出false
method(a);
}
public static void method(Object obj){
if(obj instanceof A){
A t1 = (A)obj;
t1.eat();
}
}
} class A{
String name;
A(String name){
this.name = name;
}
public String toString(){ //重写Obejct类中的toString()方法
return "fuck u";
}
public boolean equals(Object obj){ //重写Obejct类中的equals()方法,判断两个对象值是否相等
if(obj instanceof A){
A a = (A)obj;
if(this.name.equals(a.name))
return true;
else
return false;
}else{
return false;
}
}
void eat(){
System.out.println("I'm eating....");
}
}
/**
* 简单工厂模式:由一个工厂对象决定创建出哪一种产品类的实例
* 如果clothDoll或barbieDoll发生了改动,只需在DollFactory改就行了,而不需要客户端也改
*/
public class Main { //客户端
public static void main(String[] args) {
Doll r1 = DollFactory.getInstance("cloth");
System.out.println(r1.info());
Doll r2 = DollFactory.getInstance("barbie");
System.out.println(r2.info());
}
} class DollFactory{ //服务器
public static Doll getInstance(String name){
if("cloth".equals(name))
return new clothDoll();
if("barbie".equals(name))
return new barbieDoll();
return null;
}
}
interface Doll{
public String info();
}
class clothDoll implements Doll{
public String info(){
return "I'm a clothDoll...";
}
}
class barbieDoll implements Doll{
public String info(){
return "I'm a barbieDoll...";
}
}
/**
* 静态代理模式:为其他对象提供一种代理以控制对这个对象的访问
*
*/
public class Main {
public static void main(String[] args) {
Person p1 = new Person("fish7");
Proxyer m = new Proxyer(p1); //创建代理人,并传入被代理人
m.date(); //相亲
}
} interface subject{ //“主题”接口
public void date(); //相亲
}
class Person implements subject{ //被代理人
private String name;
Person(String name){
this.name = name;
}
public void date(){
System.out.println("I'm "+name+", I'm dating....");
}
}
class Proxyer implements subject{
private subject target; //代理目标对象
Proxyer(subject target){
this.target = target;
}
private void before(){ //相亲前要做的事
System.out.println("为代理人找到匹配人");
}
private void after(){ //相亲后要做的事
System.out.println("本次相亲结束");
}
public void date(){
before();
target.date();
after();
}
}
/**
* 适配器模式:将一个类的接口转换成客户希望的另外一个接口
* 适配器模式使得原本因为接口不兼容而不能在一起工作的那些类可以一起工作
*
*/
public class Main {
public static void main(String[] args) {
//System.out.println();
PowerA a = new plugA();
start(a);
PowerB b = new plugB();
PowerAdapter pa = new PowerAdapter(b); //适配器
start(pa);
}
public static void start(PowerA s){
s.Insert();
}
} class PowerAdapter implements PowerA{ //适配器,把B口“变成”A口
private PowerB b; //要进行适配的接口
public PowerAdapter(PowerB b){
this.b = b;
}
public void Insert(){
b.Connect();
}
}
interface PowerA{ //电源A接口
public void Insert();
}
interface PowerB{ //电源B接口
public void Connect();
}
class plugA implements PowerA{
public void Insert(){
System.out.println("电源A接口已经插入插头,开始工作....");
}
}
class plugB implements PowerB{
public void Connect(){
System.out.println("电源B接口已经插入插头,开始工作....");
}
}

JAVA笔记7__接口应用/Object类/简单工厂模式/静态代理模式/适配器模式的更多相关文章

  1. Java模式—静态代理模式

        静态代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问,提供“真实对象”的代表,在访问对象时引入一定程度的间接性,这种间接性可以附加多种用途. 代理模式的主要作用是为其他对象 ...

  2. Java代理模式——静态代理模式

    一:代理模式 代理模式的作用是:为其他对象提供一种代理以控制这个对象的访问.在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. 二:代理模式设计 ...

  3. 黑马程序员:Java基础总结----静态代理模式&动态代理

    黑马程序员:Java基础总结 静态代理模式&动态代理   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 静态代理模式 public  class  Ts {   ...

  4. Java 基础 - Set接口 及其实现类HashSet/LinkedHashSet/TreeSet

    笔记: /**Set接口 及其实现类 * 公用操作同Collection: * * ①size(),clear()②isEmpty(),③contains(),④add()方法 和remove()方法 ...

  5. Java NIO Path接口和Files类配合操作文件

    Java NIO Path接口和Files类配合操作文件 @author ixenos Path接口 1.Path表示的是一个目录名序列,其后还可以跟着一个文件名,路径中第一个部件是根部件时就是绝对路 ...

  6. 2.1多线程(java学习笔记) java中多线程的实现(附静态代理模式)

    一.多线程 首先我们要清楚程序.进程.线程的关系. 首先进程从属于程序,线程从属于进程. 程序指计算机执行操作或任务的指令集合,是一个静态的概念. 但我们实际运行程序时,并发程序因为相互制约,具有“执 ...

  7. 派生类&简单工厂模式

    派生类&简单工厂模式 git链接: Operation3.1.1 题目描述的代码部分的解释 首先是声明一个Rand类作为父类,然后两个子类RandNumber类和RandOperation类, ...

  8. Java进阶篇设计模式之七 ----- 享元模式和代理模式

    前言 在上一篇中我们学习了结构型模式的组合模式和过滤器模式.本篇则来学习下结构型模式最后的两个模式, 享元模式和代理模式. 享元模式 简介 享元模式主要用于减少创建对象的数量,以减少内存占用和提高性能 ...

  9. Java设计模式之七 ----- 享元模式和代理模式

    前言 在上一篇中我们学习了结构型模式的组合模式和过滤器模式.本篇则来学习下结构型模式最后的两个模式, 享元模式和代理模式. 享元模式 简介 享元模式主要用于减少创建对象的数量,以减少内存占用和提高性能 ...

随机推荐

  1. 关于 CLAHE 的理解及实现

    CLAHE CLAHE 是一种非常有效的直方图均衡算法, 目前网上已经有很多文章进行了说明, 这里说一下自己的理解. CLAHE是怎么来的 直方图均衡是一种简单快速的图像增强方法, 其原理和实现过程以 ...

  2. jvm运行过程

    ------------恢复内容开始------------ 把文件编译成字节码文件的叫编译器的前端, 线程共享的方法去和堆,非线程共享的:java虚拟机栈,本地方法栈,还有程序计数器 都是每个线程独 ...

  3. Nginx TP5环境配置

    Apache默认支持Pathinfo模式  Nginx不支持  需要手动配置  Apache默认支持Pathinfo模式  Nginx不支持  需要手动配置 server { #配置监听端口 list ...

  4. 最推荐的抓包工具charles

    Charles是一个HTTP代理服务器,HTTP监视器,反转代理服务器,当浏览器连接Charles的代理访问互联网时,Charles可以监控浏览器发送和接收的所有数据.它允许一个开发者查看所有连接互联 ...

  5. [转载]提升SQLite数据插入效率低、速度慢的方法

    转载地址:http://blog.csdn.net/chenguanzhou123/article/details/9376537#,如果有侵犯原创,请留言告知,本人会及时删除. 前言 SQLite数 ...

  6. 鸿蒙内核源码分析(互斥锁篇) | 比自旋锁丰满的互斥锁 | 百篇博客分析OpenHarmony源码 | v27.02

    百篇博客系列篇.本篇为: v27.xx 鸿蒙内核源码分析(互斥锁篇) | 比自旋锁丰满的互斥锁 | 51.c.h .o 进程通讯相关篇为: v26.xx 鸿蒙内核源码分析(自旋锁篇) | 自旋锁当立贞 ...

  7. P6624-[省选联考2020A卷]作业题【矩阵树定理,欧拉反演】

    正题 题目链接:https://www.luogu.com.cn/problem/P6624 题目大意 \(n\)个点的一张图,每条边有权值,一棵生成树的权值是所有边权和乘上边权的\(gcd\),即 ...

  8. Superedge的新特性和未来之路

    作者 王冬,腾讯云高级研发工程师,专注于Kubernetes.容器等云原生领域,SuperEdge 核心开发人员,现负责腾讯云边缘容器TKE Edge私有化相关工作. 背景 2021年9月27号,,在 ...

  9. redis在微服务领域的贡献

    本文已收录 https://github.com/lkxiaolou/lkxiaolou 欢迎star. 前言 说到redis,可能大家的脑海中蹦出的关键词是:NoSQL.KV.高性能.缓存等.但今天 ...

  10. 洛谷1429 平面最近点对(KDTree)

    qwq(明明可以直接分治过掉的) 但是还是当作联系了 首先,对于这种点的题,很显然的套路,我们要维护一个子树\(mx[i],mn[i]\)分别表示每个维度的最大值和最小值 (这里有一个要注意的东西!就 ...