// 匿名内部类 & 工厂方法 interface Service{ void method1(); void method2(); } interface ServiceFactory{ Service getService(); } class Implementation1 implements Service{ private Implementation1(){} public void method1(){ System.out.println("Implementation1 methdo1"); } public void method2(){ System.out.println("Implementation1 methdo2"); } public static ServiceFactory factory = new ServiceFactory(){ public Service getService() { return new Implementation1(); } }; } class Implementation2 implements Service{ private Implementation2(){}; public void method1() { System.out.println("Implementation2 methdo1"); } public void method2() { System.out.println("Implementation2 methdo2"); } public static ServiceFactory factory = new ServiceFactory(){ public Service getService(){ return new Implementation2(); } }; } public class Factories { public static void serviceConsumer(ServiceFactory fact){ Service s =fact.getService(); s.method1(); s.method2(); } public static void main(String[] args){ serviceConsumer(Implementation1.factory); serviceConsumer(Implementation2.factory); } }
这样类似,一个工厂来应付一种服务。 具体例子:
package InnerClass; interface Game{ boolean move(); } interface GameFactory{ Game getGame(); } class Checkers implements Game{ private Checkers(){} private int moves = 0; private static final int MOVES = 3; public boolean move(){ System.out.println("Checkers move "+moves); return ++moves != MOVES; } public static GameFactory factory = new GameFactory(){ public Game getGame(){ return new Checkers(); } }; } class Chess implements Game{ private Chess(){} private int moves = 0; private static final int MOVES = 4; public boolean move(){ System.out.println("Chess move "+moves); return ++moves != MOVES; } public static GameFactory factory = new GameFactory(){ public Game getGame(){ return new Chess(); } }; } public class Games { public static void playGame(GameFactory factory){ Game s = factory.getGame(); while(s.move()){ } } public static void main(String[] args){ playGame(Checkers.factory); playGame(Chess.factory); } }
PS:摘自Thinking in Java
发表评论
-
仿真[汽车制造]
2012-02-13 01:26 697class Car{ private final i ... -
线程例子[Condition, SignlAll, await]
2012-02-09 22:05 1040package concurrency.waxomati ... -
生产者消费者[简单示例]
2012-02-09 21:38 663class Meal{ private final ... -
泛型[创建类型实例]
2012-02-06 01:01 750public Class Erased<T> ... -
多路分发3
2012-02-05 23:16 839使用常量相关的方法 常量相关的方法允许我们为每个 ... -
多路分发2[使用enum分发]
2012-02-05 18:09 1911直接将RoShamBo1.java翻译为基于enum的版 ... -
多路分发
2012-02-05 02:06 1394多路分发 Number.plus(Number) ... -
使用Enum的自动贩卖机
2012-02-04 13:52 938public enum Input { NICKEL ... -
使用enum的责任链
2012-02-04 12:39 1193package enumerated; impor ... -
枚举类Enum,EnumSet,EnumMap
2012-02-04 02:00 1438EnumSet与HashSet相比,非常快。 p ... -
枚举类enum
2012-02-03 15:00 908一般来说,我们希望每个美剧实例能够返回对自身的描述, ... -
类的简化历[从内部类到匿名内部类]
2012-02-02 12:41 638Version1: public class DirL ... -
持有引用java.lang.ref 和 WeakHashMap
2012-02-02 01:27 986Thinking in java P554 持 ... -
Collections快速报错 fial-fast
2012-02-02 00:46 805{ public static void main( ... -
散列HashCode
2012-02-01 14:04 715散列的价值在于速度: 散列使得查询快速,由于瓶颈位于键 ... -
使用散列数据结构注意点
2012-02-01 01:32 595Goundhog自动继承基类Object,所以这里使用 ... -
Set注意点
2012-02-01 01:31 320如果我们尝试着将没有恰当支持不许的操作的类型用于需要这些 ... -
享元Map
2012-01-30 00:28 386这里之所以叫享元,注意static关键字。 定制了Entry ... -
深入容器Map
2012-01-19 15:12 403Map生成器 对Map的使用相同的方式,需要一 ... -
深入容器List
2012-01-19 14:40 348一种Generator解决方案: 所有Collect ...
相关推荐
描述中的"the different code of create factory"提到了工厂模式的创建方式多样性,这与匿名内部类的运用有关。工厂模式是一种设计模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们通过一个工厂方法来创建...
总结来说,"匿名内部类解读代码"的主题探讨了如何利用匿名内部类的特性,与传统的工厂模式相结合,以更灵活、更简洁的方式创建对象。通过"FactoryTest2"和"FactoryTest"的对比,我们可以学习到如何在不同场景下选择...
下面我们将深入探讨匿名内部类的定义、使用场景以及其与普通类的区别。 首先,匿名内部类可以分为两种类型:继承类的匿名内部类和实现接口的匿名内部类。在提供的内容中,主要讨论的是实现接口的匿名内部类。当需要...
### 使用Java匿名内部类实现一个简单的线程池 #### 一、引言 在现代软件开发中,线程池是管理并发任务的重要工具之一。它能够有效地控制运行中的线程数量,合理分配系统资源,避免频繁创建销毁线程带来的性能开销...
内部类分为四种类型:成员内部类、局部内部类、匿名内部类和静态内部类。成员内部类就像普通的类成员,可以有自己的访问修饰符;局部内部类只存在于方法或块的范围内;匿名内部类通常用于快速创建一个简单的类实例,...
在软件设计模式中,工厂模式是一种非常...在实际项目中,工厂模式经常与其他设计模式(如策略模式、建造者模式等)结合使用,以解决更复杂的问题。阅读并理解这些代码有助于深入理解工厂模式及其在Java编程中的应用。
- 匿名内部类:没有名称的内部类,通常用于实现接口或抽象类的快速定义,常见于事件处理和回调机制中。 3. 使用方法 - 成员内部类的使用: - 外部类的非静态方法可以通过创建内部类的实例来访问成员内部类的方法...
根据定义的位置,内部类可以分为四种类型:成员内部类、局部内部类、静态内部类和匿名内部类。 1. **成员内部类** - 成员内部类就如同外部类的成员一样,与成员变量和成员方法处于同一级别。 - 声明:`public ...
2. **匿名内部类**:这是一种没有名字的内部类,通常用于创建一次性使用的类。匿名内部类可以继承一个类或实现一个接口,并且可以在声明的同时直接实例化。它们常用于简化代码,尤其是在事件处理和回调机制中。 3. ...
这样的类可以是成员内部类、局部内部类、匿名内部类或静态内部类,每种都有其特定的用途和规则。让我们深入探讨这些内部类的概念、用法以及它们在实际开发中的应用。 首先,成员内部类是最常见的一种,它如同其他...
- 工厂模式:匿名内部类可以简化创建对象的过程。 - 观察者模式:内部类可以作为事件监听器。 9. **注意事项**: - 内部类会增加内存开销,因为每个内部类实例都会隐式包含一个外部类实例的引用。 - 非静态内部...
匿名内部类是一种特殊的局部内部类,它们经常用于实现接口或继承抽象类的简单场景。匿名内部类没有名字,它们通常是在声明的同时被创建和初始化。 在使用内部类时,开发者需要注意以下几点: - 内部类可以访问外部...
内部类分为四种类型:成员内部类、局部内部类、匿名内部类和静态内部类。这些案例可能会展示它们各自的用途和用法。 - 成员内部类可以直接访问外部类的所有成员,包括私有成员,这在设计模式中常用于表示组件间的...
内部类可以是成员内部类、局部内部类、匿名内部类或者静态内部类,每种都有其特定的用途和使用场景。在日常编程实践中,内部类能够帮助我们更好地组织代码,实现更复杂的设计模式。 1. 成员内部类:成员内部类就像...
- 在某些设计模式中,如工厂模式,匿名类可以用来创建特定的实例,而无需定义额外的类文件。 - 当需要对现有的类进行轻量级的扩展时,可以使用匿名类来实现。 5. **示例代码**: ```php // 匿名类继承自common...
此外,我们还需要理解事件监听机制,用匿名内部类或接口实现ActionListener,以便处理按钮点击和其他用户交互。 对于云工厂中的数据展示,JLabel和JTextComponent可以用来显示静态和动态信息,而JTable则适用于展示...
- 根据访问权限的不同,内部类可以分为四种:成员内部类、局部内部类、静态内部类和匿名内部类。 #### 成员内部类 - 成员内部类是定义在外部类成员位置的类。 - 成员内部类可以直接访问外部类的所有成员(包括私有...
内部类是定义在另一个类内部的类,可以是嵌套内部类(在类的作用域内)、局部内部类(在方法的作用域内)或匿名内部类(不需要显式命名的类)。它们提供了封装和抽象的额外层次,可以在需要时提供更灵活的设计选择。...
2. **内部类**:Java允许在类内部定义其他类,包括成员内部类、局部内部类、匿名内部类和静态内部类。这种设计允许更紧密的封装和更复杂的逻辑结构,例如事件监听器的实现。 3. **枚举(Enum)**:枚举是Java中的一...
- **匿名内部类**:没有名字的内部类,通常用于实现接口或抽象类的快速简洁实现。 - **静态内部类**:可以独立于外部类实例存在,但仍然能访问外部类的静态成员。 在选择题中,可能询问哪些内部类声明是有效的。...